<?php

namespace app\service;

use app\exception\ParameterException;
use app\model\Config;
class ConfigService
{
    private $config;

    public function __construct(){
        $this->config = new Config;
    }

    /**
     * 获取配置列表
     *
     * 该方法用于从数据库中获取所有的配置项，以便在前端页面进行展示
     * 它调用了config模型的select方法来获取数据
     *
     * @return mixed 配置项列表
     */
    public function list()
    {
        return  $this->config->select();
    }

    /**
     * 保存配置项
     *
     * 该方法接收一个包含配置项的参数数组，遍历数组中的每个配置项，
     * 如果配置项已存在，则更新其值和备注；如果不存在，则创建新的配置项
     *
     * @param array $params 包含配置项的数组
     * @return bool 表示操作是否成功
     * @throws ParameterException 如果保存过程中发生异常，则抛出参数异常
     */
    public function save($params)
    {
        try {
            if(!empty($params['data'])){
                foreach ($params['data'] as  $value){
                    $config = $this->config->where('key',$value['key'])->find();
                    if($config){
                        $config->value = $value['value'];
                        $config->remarks = $value['remarks'];
                        $config->save();
                    }else{
                        $this->config->create(['key'=>$value['key'],'value'=>$value['value'],'remarks'=>$value['remarks']]);
                    }
                }
            }
            return true;
        }catch (\Exception $e){
            throw new ParameterException($e->getMessage());
        }
    }

    /**
     * 根据键获取配置值
     *
     * 该方法通过配置项的键来获取其对应的值，主要用于在系统中动态获取配置信息
     * 它调用了config模型的where方法来定位配置项，并使用value方法直接返回配置值
     *
     * @param string $key 配置项的键
     * @return mixed 配置项的值
     */
    public function getByKey($key)
    {
        return $this->config->where(['key'=>$key])->value("value");
    }
}
